package cn.tedu.oop;
/**本类用于多态的入门案例*/
public class TestDemo {
    public static void main(String[] args) {
//        Cat c=new Cat();
//        Dog d=new Dog();
        Animal a=new Animal("小狗");

        Animal c1=new Cat();
        Animal d1=new Dog();
        Cat c0=new Cat();
        Dog d0=new Dog();
        c1.play();
        d0.play();
//        c1.eat();
//        d1.eat();
//        c0.eat();
//        d0.eat();
//        c1.jump();
        /**多态中，成员变量使用的是父类的
         * 多态中方法的定义使用的是父类的，方法实现使用的是子类的
         * 多态中，静态方法使用的都是自己的，因为静态就不存在重写的概念*/
        c0.junp();
        d0.run();
        a.dring("小猫");
        Animal a1=new Cat("小喵");
/**多态的出现是为了统一调用标准，向父类看齐
 * 父类中定义了的功能才能使用，子类的特有功能用不了*/
    }
}
/**多态的前提：继承*/
class Animal{
    String name;
    int sum=10;
    public static void play(){
        System.out.println("小动物玩啥都行");
    }
    public Animal() {
    }
    public Animal(String name) {
        this.name = name;
    }
    public void eat(){
      System.out.println("小动物吃啥都行~");
  }
  public void dring(String name){
      System.out.println(this.name+"喝了"+name);
  }
}
class  Cat extends Animal{
    int sum=100;
    public void junp(){
        System.out.println("小猫爱跳");
    }
    public Cat(String name) {
        super(name);
    }
    public Cat(){

    }
    public void eat(){
        System.out.println("小猫喜欢吃鱼"+sum);
    }
}
class Dog extends Animal{
    public void run(){
        System.out.println("小狗爱跑");
    }
    //@Override
    public static void play(){
        System.out.println("小狗爱打滚");
    }
    public Dog(){

    }
    public Dog(String name) {
        super(name);
    }

    public void eat(){
        System.out.println("小狗爱吃肉骨头");
    }
}